# -*- coding: utf_8 -*-
# @Time : 2021/1/18 11:09
# @Author : l y w
# @Remark : modbus 控制
import json

import modbus_tk.modbus_rtu_over_tcp as mt


class ConnentModbus(object):

    def __init__(self, host="127.0.0.1", port=502, timeout=5.0, salve=1):
        # 连接到slave端
        # self.master = mt.TcpMaster(host, port)
        # self.master = mt.RtuOverTcpMaster(host, port)

        self.master = mt.RtuOverTcpMaster(host, port)
        self.master.set_timeout(timeout)
        self.salve: int = salve

    def read_data(self, function_code: int, start_addr: int, quantity=1):
        """
        读取数据
        :param slave_id: 寄存器的id
        :param start_addr: 寄存器的地址
        :param quantity: 获取多少数据 从寄存器地址开始的位置
        :return: 获取的数据 tuple类型 根据quantity 传多少 就是tuple 中的数量
        """
        return self.master.execute(slave=self.salve, function_code=function_code, starting_address=start_addr,
                                   quantity_of_x=quantity, )

    def write_data(self, function_code: int, addr: int, data: int):
        """
        写入数据
        :param slave_id: 寄存器的id
        :param addr: 寄存器的地址
        :param data: 写入寄存数据
        :return: 写入的返回值
        """
        return self.master.execute(slave=self.salve, function_code=function_code, starting_address=addr,
                                   output_value=data)
